abstract class Animal {
    private String name;
    private String type;
    private String breed;
    private double price;

    public Animal(String name, String type, String breed, double price) {
        this.name = name;
        this.type = type;
        this.breed = breed;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public String getType() {
        return type;
    }

    public String getBreed() {
        return breed;
    }

    public double getPrice() {
        return price;
    }

    public void eat() {
        System.out.println(name + " 正在吃饭。");
    }

    public void sleep() {
        System.out.println(name + " 正在睡觉。");
    }

    public abstract void play();
    public abstract void makeSound();
}

class Cat extends Animal {
    public Cat(String name, String type, String breed, double price) {
        super(name, type, breed, price);
    }

    @Override
    public void play() {
        System.out.println(getName() + " 正在玩耍。");
    }

    @Override
    public void makeSound() {
        System.out.println(getName() + " 喵喵叫。");
    }
}

class Dog extends Animal {
    public Dog(String name, String type, String breed, double price) {
        super(name, type, breed, price);
    }

    @Override
    public void play() {
        System.out.println(getName() + " 正在玩耍。");
    }

    @Override
    public void makeSound() {
        System.out.println(getName() + " 汪汪叫。");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建 Cat 对象
        Cat cat1 = new Cat("小花", "猫", "苏格兰折耳猫", 2500.0);
        Cat cat2 = new Cat("小黑", "猫", "缅因猫", 3500.0);

        // 创建 Dog 对象
        Dog dog1 = new Dog("小白", "狗", "哈士奇", 4500.0);
        Dog dog2 = new Dog("大黄", "狗", "阿拉斯加雪橇犬", 5500.0);

        // 输出 Cat1 的属性
        System.out.println("Cat1 属性:");
        System.out.println("名字: " + cat1.getName()); // 使用getter方法
        System.out.println("类型: " + cat1.getType()); // 使用getter方法
        System.out.println("品种: " + cat1.getBreed()); // 使用getter方法
        System.out.println("价格: " + cat1.getPrice()); // 使用getter方法

        // 测试 Cat1 的方法
        cat1.eat();
        cat1.sleep();
        cat1.play();

        // 输出 Dog1 的属性
        System.out.println("\nDog1 属性:");
        System.out.println("名字: " + dog1.getName()); // 使用getter方法
        System.out.println("类型: " + dog1.getType()); // 使用getter方法
        System.out.println("品种: " + dog1.getBreed()); // 使用getter方法
        System.out.println("价格: " + dog1.getPrice()); // 使用getter方法

        // 测试 Dog1 的方法
        dog1.eat();
        dog1.sleep();
        dog1.play();
        dog1.makeSound(); // 狗可以随时叫

        // 输出 Cat2 的属性
        System.out.println("\nCat2 属性:");
        System.out.println("名字: " + cat2.getName()); // 使用getter方法
        // 可以类似地输出其他属性，但为了简洁，这里省略

        // 测试 Cat2 的方法
        cat2.eat();

        // 输出 Dog2 的属性
        System.out.println("\nDog2 的品种和价格:");
        System.out.println("品种: " + dog2.getBreed()); // 使用getter方法
        System.out.println("价格: " + dog2.getPrice()); // 使用getter方法

        // 测试 Dog2 的方法
        dog2.makeSound();
    }
}